package net.projecteuler.prob;

import java.math.BigInteger;

public class Problem65 implements Runnable {

	@Override
	public void run() {
		int[] fraConst = new int[100];
		fraConst[0] = 2;
		for(int i = 1; i <= 33; i++){
			fraConst[3 * i - 2] = 1;
			fraConst[3 * i - 1] = 2 * i;
			fraConst[3 * i] = 1;
		}
		
		BigInteger n = big(fraConst[99]);
		BigInteger d = BigInteger.ONE;
		
		for(int i = 98; i >= 0; i--){
			int k = fraConst[i];
			BigInteger temp = BigInteger.ZERO;
			temp = temp.add(d);
			for(int j = 0; j < k; j++)
				temp = temp.add(n);
			d = n;
			n = temp;
			
			BigInteger gcd = n.gcd(d);
			d = d.divide(gcd);
			n = n.divide(gcd);
		}
		
		int digitalSum = 0;
		String nStr = n.toString();
		for(int i = 0; i < nStr.length(); i++)
			digitalSum += nStr.codePointAt(i) - '0';
		
		System.out.println(digitalSum);
		
	}
	
	private BigInteger big(int value){
		return new BigInteger(Integer.toString(value));
	}

}
